from django.http import HttpResponse, JsonResponse
from django.shortcuts import render
from django.views import View

# Create your views here.


# 基于函数的视图
def login(request):
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 实现业务逻辑（与数据库进行交互，判断是否重复失败等等）

        headers = {
            'token': 'ld123456'
        }

        # 下方可以添加一些信息到响应头，status可以设置访问后的状态码
        # return HttpResponse(f'用户{username}的密码是{password}', content_type="text/html; charset=utf-8",
        #                     status=404, headers=headers)

        # return HttpResponse(f'用户{username}的密码是{password}')

        res = {
            'name': username,
            'password': password,
            'status': 200,
            'message': 'OK'
        }

        return JsonResponse(res)

    FORBIDDEN_IP = ['127.0.0.1', '0.0.0.0']
    # request.META 获取请求的请求信息（包含请求头等），REMOTE_ADDR 获取客户端的IP地址（可以知道是谁访问你的网址）
    """  request.META能获取到的参数信息如下：
    CONTENT_LENGTH:请求体的长度(字符串)
    CONTENT_TYPE :请求体的 MIME 类型
    HTTP_ACCEPT :可接受的响应内容类型
    HTTP_ACCEPT_ENCODING :可接受的响应编码
    HTTP_ACCEPT_LANGUAGE :可接受的响应语言
    HTTP_HOST :客户端发送的 HTTP 主机头
    HTTP_REFERER:referrer 页面，如果有的话
    HTTP_USER_AGENT :客户端的用户代理字符串
    QUERY_STRING :查询字符串，是一个单一的(未解析的)字符串
    REMOTE_ADDR :客户机的IP 地址
    REMOTE_HOST :客户机的主机名
    REQUEST_METHOD:"GET"或"POST”等字符串
    SERVER_NAME:服务器的主机名
    SERVER_PORT:服务器的端口(字符串)
    PS：想要查看更多参数，可自行打印查看 print(request.META)
    """
    # 下方为IP频繁访问网站的场景，处理是把IP添加到黑名单，禁止访问
    # if request.META.get('REMOTE_ADDR') in FORBIDDEN_IP:
    #     return HttpResponse('请求异常')

    # request.headers 可以获取请求头的信息，想要查看更多参数，可自行打印查看 print(request.headers)
    # 下面为爬虫脚本访问网站时，网站第一步的反爬策略：检测请求头，如果没有请求头，则拦截
    if 'Mozilla' not in request.headers.get('User-Agent'):
        return HttpResponse('发现爬虫，禁止访问')

    return render(request, 'login.html')  # render 是渲染html文件


# 基于类的视图
class RegisterView(View):
    def get(self, request):
        return render(request, 'register.html')

    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        # 实现业务逻辑
        return HttpResponse(f'用户{username}的密码是{password}')
